Actualmente tengo una aplicación con Laravel + Sanctum + Vue SPA + Apollo GraphQL.
Estoy tratando de hacer que una sesión caduque como en una aplicación normal de Laravel, pero no puedo lograrlo.
Primero hago una solicitud para activar la csrf-cookie de Sanctum en la interfaz:
await fetch(`${process.env.VUE_APP_API_HTTP}/api/csrf-cookie`, { credentials: 'include' }) Genera 2 cookies en el navegador: XSRF-COOKIE y laravel_session
Al iniciar sesión, uso apollo y auth-token después de realizar una solicitud de inicio de sesión:
const data = await apolloClient.mutate({ mutation: Login, variables: credentials }) const token = data.data.login.token await onLogin(apolloClient, token) export async function onLogin (apolloClient, token) { if (typeof localStorage !== 'undefined' && token) { localStorage.setItem(AUTH_TOKEN_NAME, token) } .... Así que paso el token y la cookie a apolloClient link prop, pero no estoy seguro de si es necesario pasar el XSRF-TOKEN.
const authLink = setContext(async (_, { headers }) => { const token = localStorage.getItem(AUTH_TOKEN_NAME) return { headers: { ...headers, authorization: token ? `Bearer ${token}` : '', 'XSRF-TOKEN': Cookie.get('XSRF-TOKEN'), } } }) Aquí está el problema: la sesión de inicio de sesión nunca caduca, incluso con la cookie laravel_session , ya intenté pasar laravel_session como encabezado en mi conexión de enlace, pero parece que no funciona.
Mi session.php de Laravel está configurado 'expire_on_close' => true para asegurarme de que puedo probarlo. Cierro el navegador y lo vuelvo a abrir, también estoy seguro de que la cookie está configurada para caducar al cerrar porque dice en la información de cookies del navegador.
¿Alguna idea de cómo puedo hacer que la sesión de laravel funcione en un SPA?
Si está utilizando cookies para administrar la sesión, su archivo .env debería verse así:
SESSION_DRIVER=cookieTambién puede definir la duración de la sesión a continuación
SESSION_LIFETIME=120Sugerencia: establezca la vida útil en 1 minuto, inicie sesión y espere a ver si caduca. ¡Hágamelo saber!